#pragma once


template <typename T>
class Vector3D
{
public:

	Vector3D(void) : X(0), Y(0), Z(0) {}
	Vector3D(T x, T y, T z) : X(x), Y(y), Z(z) {}
	Vector3D(const Vector3D<T>& val)
	{
		set(val);
	}
	~Vector3D(void)	{}

	const T&	get_x() const { return X; }
	const T&	get_y() const { return Y; }
	const T&	get_z() const { return Z; }

	void		set_x(T const & x) { X = x; }
	void		set_y(T const & y) { Y = y; }
	void		set_z(T const & z) { Z = z; }

	void		set(const Vector3D<T>& val)
	{
		set_x(val.get_x());
		set_y(val.get_y());
		set_z(val.get_z());
	}

	bool operator==(const Vector3D<T>& rhs) const
	{
		return get_x() == rhs.get_x() && get_y() == rhs.get_y() 
			&& get_z() == rhs.get_z();
	}

	Vector3D<T>& operator=(const Vector3D<T>& rhs)
	{
		set(rhs);
		return *this;
	}

private:
	T X, Y, Z;
};



